Soru & Cevap

Loading Bekletme Ekranı Nasıl Oluşturulur?

13.12.2013 - 03:58

Merhaba hakiki bir loading ekranı nasıl olusturulur, yani su sadece thread döndüren sahtelerinden değilde örneğin internetten bir radyo yayının alınması sırasında yayın gelinceye kadar bekletme, yayın varsa devam edip yayın yoksa "suan da istasyona ulaşılamadı" şeklinde bir uyarı verdirebileceğimiz loading ekranı nasıl olusturulur?

Teşekkür ederim

Syagılarımla.

160 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-9853-1415485106.jpg
coder86
17.12.2013 - 02:26

Selam Yasin,

Ben gönderdiğin linklerdeki örneklere bakarak işlemi gerçekleştirmeye çalıştım ancak bir sorunla karşılastım.Sorunu aşağıya belirtecegim, fakat ondan önce belirtmediğim birşey daha var onu da sana aktarmak istiyorum, loading ekranı olusturmak istememdeki sebep bir radyo uygulaması geliştirmeye calısıyorum ve kullanıcı play tusuna bastıgında o arada ekrana bos bos bakmasın diye loading koymak istedim, yani kullanıcı play e bastıgında açılıyor lütfen bekleyiniz diye bir loading ekranı acılacak ve o sırada da arka planda belirttiğimz url de radyo yayını varmı yok mu kontrol edip, varsa devam edecek yoksa yayın bulunamadı diyecek. Çünkü bazen internet radyolarının yayınları kesiliyor, açılmıyor. Eğer ben loading koymazsam kullanıcı programın calısmadıgını bozuk oldugunu sanacak böyle bir durumla karsılastıgında. Durum bundan ibaret, şimdi sıkıntıyı paylasıyorum seninle, doInBackgraound metodu içinde vogelladaki kodu denemeye calıstım ve sonra birde progress dialog kullanmak istedim ancak , progress dialog kullandıgımda normalde 4 tane tab olan ekranımda ilk açılışta tek bir tab gösteriyor ve AnasayfaActivity icindeki button, seekbar, logo, arka planresmi vs gibi bütün ne varsa yok ediyor, hatanın resmini ve Anasayfa activity icindeki kodları gonderiyorum.

Activity sınıfımdaki kodlar;

package com.denemeservis;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.R.string;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ToggleButton;

public class AnasayfaActivity extends Activity implements
        OnCheckedChangeListener, OnSeekBarChangeListener {

    private Button digerRadyo;
    private Button mesajGonder;
    private Button kamera;
    private ToggleButton playStop;
    private AudioManager manager;
    private SeekBar ses;
    int volume = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.anasayfa2);
        //this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        new AsyncTaskClass().execute();
        Log.d("onCreate", "onCreate");
        baslasinUI();
        if (!networkKontrol()) {
            baglantiMesaji();
        }

        manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        int maxVolume = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curVolume = manager.getStreamVolume(AudioManager.STREAM_MUSIC);

        ses.setMax(maxVolume);
        ses.setProgress(curVolume);

        digerRadyo = (Button) findViewById(R.id.btndigerRadyo);
        digerRadyo.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent radyo = new Intent("android.intent.action.DigerRadyo");
                startActivity(radyo);
            }
        });

        mesajGonder = (Button) findViewById(R.id.btnmesajGonder);
        mesajGonder.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent radyo = new Intent("android.intent.action.Mesaj");
                startActivity(radyo);

            }
        });

        kamera = (Button) findViewById(R.id.btnKamera);
        kamera.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent radyo = new Intent("android.intent.action.Kamera");
                startActivity(radyo);
            }
        });
        
    }

    private void baslasinUI() {
        Log.d("UI", "UI");

        playStop = (ToggleButton) findViewById(R.id.tglbtnPlayStop);
        playStop.setOnCheckedChangeListener(this);

        ses = (SeekBar) findViewById(R.id.skbrSes);
        ses.setOnSeekBarChangeListener(this);
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        //try {

        if (isChecked) {
            Log.d("play", "play");
                startService(new Intent(this, DinlemeServisi.class));
                //Toast.makeText(getApplicationContext(), "Açılıyor, Lütfen Bekleyiniz!", Toast.LENGTH_LONG).show();
                AsyncTaskClass taskClass = new AsyncTaskClass();
                taskClass.execute(new String[]{ "http://85.95.248.115:8014/" });

         } else {
            Log.d("stop", "stop");
            stopService(new Intent(this, DinlemeServisi.class));
            
        }
        
        try {
            if(DinlemeServisiRahmetFM.class !=null){
                stopService(new Intent(this,DinlemeServisiRahmetFM.class));
            }if(DinlemeServisiYurtFM.class !=null){
                stopService(new Intent(this,DinlemeServisiYurtFM.class));
            }if(DinlemeServisiRisaleFM.class !=null){
                stopService(new Intent(this,DinlemeServisiRisaleFM.class));
            }if(DinlemeServisiIrsadFM.class !=null){
                stopService(new Intent(this,DinlemeServisiIrsadFM.class));
            }if(DinlemeServisiHikmetFM.class !=null){
                stopService(new Intent(this,DinlemeServisiHikmetFM.class));
            }else if(DinlemeServisi.class !=null){
                startService(new Intent(this,DinlemeServisi.class));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
        
        
        
        /*} catch (Exception e) {
            e.printStackTrace();
        }*/
        
        
        
        
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
        manager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
        volume = progress;
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        Toast.makeText(getApplicationContext(),
                "Ses : " + Integer.toString(volume), Toast.LENGTH_SHORT)
                .show();
    }

    public boolean networkKontrol() {
        try {

        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();

        if (networkInfo != null && networkInfo.isConnectedOrConnecting()) {
            return true;
        }
        
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    protected void baglantiMesaji() {
        try {

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setMessage("İnternet Bağlantınıza Ulaşamadık!" + "\n" +"Lütfen Bağlantınızı Kontrol Ediniz!")
                .setPositiveButton("Tamam",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                               
                                System.exit(0);
                                
                            }
                        });

        final AlertDialog alert = builder.create();
        alert.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        
        if(keyCode==KeyEvent.KEYCODE_BACK){
            AlertDialog.Builder backbuilder = new AlertDialog.Builder(this);
            
            backbuilder.setMessage("Uygulamadan Çıkmak Üzeresiniz!").setTitle("ÇIKIŞ").setCancelable(false)
            .setPositiveButton("Evet", new DialogInterface.OnClickListener() {
                
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    AnasayfaActivity.this.finish();
                    moveTaskToBack(false);
                    
                    try {
                        if(DinlemeServisiRahmetFM.class !=null){
                            stopService(new Intent(getApplicationContext(),DinlemeServisiRahmetFM.class));
                        }if(DinlemeServisiYurtFM.class !=null){
                            stopService(new Intent(getApplicationContext(),DinlemeServisiYurtFM.class));
                        }if(DinlemeServisiRisaleFM.class !=null){
                            stopService(new Intent(getApplicationContext(),DinlemeServisiRisaleFM.class));
                        }if(DinlemeServisiIrsadFM.class !=null){
                            stopService(new Intent(getApplicationContext(),DinlemeServisiIrsadFM.class));
                        }if(DinlemeServisiHikmetFM.class !=null){
                            stopService(new Intent(getApplicationContext(),DinlemeServisiHikmetFM.class));
                        }else if(DinlemeServisi.class !=null){
                            stopService(new Intent(getApplicationContext(),DinlemeServisi.class));
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    
                }
            })
            .setNegativeButton("Hayır", new DialogInterface.OnClickListener() {
                
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    
                }
            });
            AlertDialog alertDialog = backbuilder.create();
            alertDialog.show();
        }
        
        return super.onKeyDown(keyCode, event);
    }
    
    private class AsyncTaskClass extends AsyncTask<String, Void, String>{
        
        @SuppressWarnings("unused")
        String message;
        ProgressDialog progressDialog;
        
        @SuppressWarnings("unused")
        public void resfreshTask(String message){
            this.message = message;
            this.progressDialog = new ProgressDialog(AnasayfaActivity.this);
        }
        @Override
        protected void onPreExecute() {
            progressDialog.setMessage("Açılıyor, Lütfen Bekleyiniz!");
            progressDialog.setIndeterminate(true);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressDialog.setCancelable(true);
            progressDialog.show();
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... urls) {
            String response = "";
            for(String url : urls){
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                try {
                    HttpResponse execute = client.execute(httpGet);
                    InputStream content = execute.getEntity().getContent();
                    
                    BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
                      String s = "";
                      while ((s = buffer.readLine()) != null) {
                        response += s;
                      }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            
        }
            return response;
        }
        @Override
        protected void onPostExecute(String result) {

            /*if(progressDialog.isShowing()){
                 progressDialog.dismiss();
            }*/
                  
            super.onPostExecute(result);
        }
        
        
    }
    
}

 

/sites/default/files/cevaplar/dosya/2020/file-hata_03.jpg
picture-9853-1415485106.jpg
coder86
16.12.2013 - 05:06

Selam Yasin;

Kesinlikle haklısın öğrenmem gereken çok şey var, ingilizce konusundaki yetersizlik artık beni fazlasıyla rahatsız etmeye başladı ama aşıcam inşallah. Bilgi ve yardımın için tekrar teşekkür ederim.

Profile picture for user yasinkafadar
yasinkafadar
14.12.2013 - 12:34

Selam Nurettin,

Loading ekranı yapmak için birçok yöntem vardır. Ama en sık kullanılan hali senin işini görür sanırım. Aşağıda Türkçe ve yabancı kaynaklardan bazı örnekler var. Bunları inceleyip nasıl yapacağın konusunda bilgi alabilirsin. 

Android'de sık olarak internetten veri çekileceği zaman AsyncTask kullanılıyor. Android'de backgorund'da işlemler nasıl yapılıyor daha sonra bunlar nasıl UI thread'e geri gönderiliyor bunları ve bu kavramları da öğrenmeni tavsiye ederim.

http://developer.android.com/reference/android/os/AsyncTask.html

http://blog.ogulcanorhan.com/android-asynctask-kullanimi/

http://kadiranilturgut.com/android-asynctask/

http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html